// es5的方法定义一个类
// let Animal = function (type) {
//     this.type = type;
// }
// // 使用原型链
// Animal.prototype.eat = function () {
//     console.log('i am eat food')
// }
// let dog = new Animal('dog')
// let monkey = new Animal('monkey');
// console.log(dog);




// monkey.constructor.prototype.eat = function () {
//     // 修改monkey构造函数上原型的eat方法
// }


// class Animal {
//     constructor(type) {
//         this.type = type
//     }
//     eat() {
//         console.log('i am eat food')
//     }
// }
// let dog = new Animal('dog')
// let monkey = new Animal('monkey');

// console.log(typeof Animal); //function
// dog.eat();
// monkey.eat();

// 保留自读属性

let _age = 4
class Animal {
    constructor(type) {
        this.type = type
    }
    // 只读属性： //看上去是函数但是如果前面加了get 或者set就变成了属性
    get age() {
        return _age
    }
    set age(val) {
        if (val < 7 && val > 4) {
            _age = val
        }
    }
    eat() {
        console.log('i am eat food')
    }
}
let dog = new Animal('dog')
console.log(dog.age);
dog.age = 8;
console.log(dog.age); //依旧输出4

let cat = new Animal('cat')
cat.age = 6;
console.log(cat.age) //因为在set拦截器内所以可以改变age的值